﻿namespace BlogsAPI.Rdf
{
    using System.Xml.Serialization;

    /// <summary>
    /// Свойство ya:blogActivity содержит информацию об одном из видов активности в блоге, 
    /// связанной с добавлением или удалением комментариев (ya:Comments), записей (ya:Posts), 
    /// ссылок (ya:Links) и читателей (ya:Readers).
    /// </summary>
    /// <value>blogActivity - активность в блоге</value>
    [XmlRoot("blogActivity", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
    public class BlogActivityClass : RdfElement
    {
        [XmlElement("Posts", Namespace = "http://blogs.yandex.ru/schema/foaf/", Type = typeof(PostsActivity))]
        [XmlElement("Comments", Namespace = "http://blogs.yandex.ru/schema/foaf/", Type = typeof(CommentsActivity))]
        [XmlElement("Readers", Namespace = "http://blogs.yandex.ru/schema/foaf/", Type = typeof(ReadersActivity))]
        [XmlElement("Links", Namespace = "http://blogs.yandex.ru/schema/foaf/", Type = typeof(LinksActivity))]
        public Activity data { get; set; }
    }

    
    /// <summary>
    /// Свойство ya:blogActivity содержит информацию об одном из видов активности в блоге, 
    /// связанной с добавлением или удалением комментариев (ya:Comments), записей (ya:Posts), 
    /// ссылок (ya:Links) и читателей (ya:Readers).
    /// </summary>
    /// <value>blogActivity - активность в блоге</value>
    public abstract class Activity
    {

        [XmlElement("received", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
        public int Received;
    }

    /// <summary>
    /// Класс ya:Posts предназначен для описания коллекции записей, содержащихся в журнале пользователя.
    /// При помощи ya:Posts можно указать RSS-поток с записями пользователя и описать произошедшие 
    /// в нем изменения, например, количество добавленных записей.
    /// </summary>
    [XmlRoot("Posts", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
    public class PostsActivity : Activity
    {

        [XmlElement("feed", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
        public RdfElement Feed;


        /// <summary>
        /// Undescribed field =(
        /// </summary>
        /// <example>http://www.liveinternet.ru/users/1955645/foaf</example>
        [XmlElement("RSS", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
        public string RSS
        {
            get {
                return Feed == null ? null:Feed.Resource; }
            set {
                Feed = new RdfElement {Resource = value};
            }
        }

        [XmlElement("posted", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
        public int Posted;
    }


    /// <summary>
    /// Класс ya:Comments предназначен для описания коллекции комментариев, оставленных в журнале пользователя, а также сделанных самим пользователем. 
    /// При помощи ya:Comments можно указать RSS-поток с комментариями и произошедшие в нем изменения, 
    /// такие как количество добавленных или полученных комментариев.
    /// </summary>
    [XmlRoot("Comments", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
    public class CommentsActivity : PostsActivity
    {
    }

    /// <summary>
    /// Класс ya:Links предназначен для описания ссылок на журнал пользователя. 
    /// С его помощью можно указать количество ссылок.
    /// </summary>
    [XmlRoot("Links", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
    public class LinksActivity : Activity
    {
    }

    /// <summary>
    /// Класс ya:Readers предназначен для хранения информации о читателях журнала пользователя. 
    /// С его помощью можно указать количество читателей.
    /// </summary>
    [XmlRoot("Readers", Namespace = "http://blogs.yandex.ru/schema/foaf/")]
    public class ReadersActivity : Activity
    {
    }
}
